home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / (A)TB / (A)TBK.ADF / AIBB / AIBB2.doc < prev    next >
Text File  |  1991-02-10  |  49KB  |  786 lines

  1.                       Amiga Intuition Based Benchmarks
  2.                       Version 2.0   ⌐1990 LaMonte Koop
  3.  
  4.  
  5.      This program is designed to test various aspects of CPU performance
  6. on your Amiga.  I must note that the tests used are for evaluating CPU
  7. perfomance ONLY, and not math coprocessor performance.  FPU support is not
  8. included in this version, but may be in a future release.  The comparisons
  9. made within the program are designed to be a 'General' type of comparison.
  10. They are far from 'exact to 0.000000000xx percentage or somesuch.
  11. Because of the nature of computer systems, and the fact that differences
  12. can occur between two machines of the same type, the comparisons I make
  13. should be used as an average view of the systems compared.  Many comparison
  14. samples were used to gather these figures, and most come within a good
  15. proximity of the values.  The conditions under which these values were 
  16. obtained is explained in the documentation below.  If you want to REALLY
  17. be sure of the comparisons, ideally you should run the tests on your 
  18. machine, record the time value each test displays (the time the test took
  19. to run), and do the same thing to the machine you wish to compare to,
  20. and evaluate the results.  This program will give you an average result
  21. answer however, allowing you to make general comparisons with other types
  22. of accelerators and machines.  Please do read the subsection under menus
  23. describing the 'Be Selfish' option...there are some warnings you MUST
  24. read there.  As with all benchmarks, a certain environment had to be set
  25. up for the base results used for the comparisons.  Please do read the
  26. sections pertaining to the environment used for the base machines in
  27. AIBB's comparisons.
  28.  
  29.  
  30. Legal Information:  (gasp...choke...)
  31.  
  32.  Amiga, all Amiga models, and Intuition are trademarks of Commodore-Amiga Inc.  
  33.  MC68000, MC68010, MC68020, MC68030, and MC68040 microprocessor designations
  34.  trademarks of Motorola Inc.
  35.  
  36. Disclaimer:  I make no guarantees that this program will be accurate.  I
  37.              have made every attempt to make it so, but I cannot be held
  38.              responsible for its accuracy, and/or consequences of such.
  39.              (In other words, include standard disclaimer here :-) )
  40.              Also, should this program maim and/or destroy various aspects
  41.              of your Amiga, I am also not responsible.  (Well...it hasn't
  42.              killed yet...): Another meaning; if you run this program, and 
  43.              something about it surprises you, causing you to
  44.              spill coffee into your machine, which sends a power spike
  45.              feedback through the power lines, down to your local power
  46.              station, which subsequently explodes in flames...,
  47.              I don't, and never did exist.  ;^) 
  48.  
  49. This program has been a GREAT deal of work...I consider it to be of a
  50. 'Share/Free' ware type of release.  I make no REQUIREMENT that a donation
  51. or fee be sent, but if you find it very useful, anything would be
  52. appreciated (cars...spare Amiga 3000s...large sums of cash :-) ). 
  53. In any case, AIBB is NOT PUBLIC DOMAIN!  You may not change it or modify
  54. it...and certainly don't call it your own program...
  55. That'd really bug me <^_^>.
  56.  
  57. -----------------------------------------------------------------------------
  58. PROGRAM REQUIREMENTS:
  59.  
  60.    This program can be used on any Amiga...but there are a few requirements
  61. to use all of it's features.  First, to use all of the test features, it
  62. should be started with a stack setting of 12000.  The icon included will
  63. do this for you, or you can do it yourself from the CLI.  Second, in order
  64. to use the Log File saving utility, you must have either the arp.library,
  65. or req.library in you libs: directory.  Please read the appropriate sections
  66. below for more information on these topics.  Note that these requirements
  67. are not in actuality 'requirements' for the entire use of the program, but
  68. rather for certain features of it.
  69.  
  70.  
  71. USING THE PROGRAM:
  72.  
  73.      This program was designed to be fairly easy to use...which is the 
  74. reason I utilized an Intuition interface.  Basically, test options and
  75. such are selected from menu items, and a test is intiated by selecting
  76. it's gadget on the screen.  Again, note that the comparisons made in this
  77. program are meant to be general.  Here's an overview:
  78.  
  79. Menu Items:
  80.    The menu fields in the menu bar for AIBB are as explained below:
  81.  
  82. The 'General' menu:
  83.      About:   
  84.             This simply shows my neato little 'about the program and
  85.             life in general' requester.  Fairly standard stuff.
  86.      System Status:
  87.             A few key points of interest about your system will be displayed.
  88.             Among them are:
  89.               Exec library version: (aww...why not? :-) );
  90.               System Stack location:  The system stack on the Amiga is normally
  91.               located in either CHIP (for 1+ meg CHIP RAM machines), or SLOW-
  92.               FAST RAM (for 512K CHIP RAM machines).  There are programs 
  93.               available which will move the system stack into FAST RAM. This
  94.               allows the system to access said stack area without possible
  95.               contention occuring on the CHIP RAM bus, and can somewhat
  96.               improve system performance. [Not a GREAT deal, but anything
  97.               counts :-) ].
  98.               Memory Information:  Your currently available CHIP and FAST
  99.               ram is displayed, along with figures denoting the largest
  100.               available contiguous chunk of said memory types.  These 
  101.               'chunk' figures are important, as AIBB allocates memory for
  102.               certain tests, and if a large enough contiguous memory area
  103.               is not available in FAST RAM, the system will search the memory
  104.               lists until it finds one (or fails), and just may allocate the
  105.               memory in a slower medium. 
  106.      Start/Stop Log File:
  107.             This will allow you to activate/deactivate AIBB's saving of
  108.             test results. [The menu will show 'Start' when you are 
  109.             currently NOT saving results, and 'Stop' when you are]. When
  110.             first selected, AIBB will call up a file requester asking you
  111.             for the name of the Log file to use.  Currently, 2 file 
  112.             requesters are supported...the one found in Colin Fox & Bruce
  113.             Dawson's requester library (req.library), and the standard 
  114.             ARP requester library...you will need either the req.library
  115.             or arp.library in your libs: directory to have access to this
  116.             saving feature [Worry not...I'm writing my own requester as
  117.             well, and will probably make an update AIBB with it, if you 
  118.             do not want these shared libraries].  AIBB prefers the 
  119.             req.library requester, and will first look for it...it then
  120.             will attempt to gain access to the arp.library...If it cannot
  121.             find either of these, it will disable this menu function.
  122.             When a file is selected, AIBB first checks to see if it exists.
  123.             If not, it will create it, writing the identifier 'AIBBLogFile'
  124.             at the head of the file (standard text file).  All future test
  125.             results will be appended to this file, until 'Stop Log File'
  126.             is selected, or the program exits. [Note: it is NOT necessary to
  127.             stop file logging before exiting...it is mainly there if you 
  128.             wish to make another file].  If the file you select DOES exist,
  129.             AIBB will check the beginning of the file for the 'AIBBLogFile'
  130.             identifier...if it finds this, it will again append all results
  131.             to the end of this file (nothing will be overwritten)...if AIBB
  132.             does not find the identifier at the start of the file, a 
  133.             requester will pop up warning that the file is NOT a standard
  134.             AIBB log file, and will ask you if you wish to cancel the
  135.             operation, OR use the file anyway.  Be careful..this warning is
  136.             designed to keep you from writing over important files...or 
  137.             programs. [NOTE:  AIBB WILL write into a binary file if told 
  138.             to continue...I will add some better checking in the future, but
  139.             for now, WATCH the warning!].  About the file requesters:
  140.             Personally, I find the one in the 'req.library' much more 
  141.             appealing...try that one if you at all can.  The next version of
  142.             AIBB will support the AmigaOS 2.0 standard file requester as well,
  143.             and will favor that one over the others it checks for. Note that
  144.             AIBB does not buffer results...it writes to the file as soon as
  145.             a test is completed.  This shouldn't be too much of a problem,
  146.             but if people find it irritating, I will of course add in some
  147.             buffering.  If desired, RAM: or a recoverable RAMdisk can be used
  148.             to save results, but care should be taken that the space the
  149.             file takes will not use up FAST RAM to an extent that the 
  150.             test results will be affected.
  151.      Quit:
  152.             Self explanatory. (I hope)
  153.             The machine will be placed back into it's baby original
  154.             state when the program exits...regardless of the manipulations
  155.             which may have been done during the tests (See the section
  156.             on 680x0 cache manipulation)
  157.  
  158. The 'Test Options' field contains:
  159.     Be Selfish:  
  160.             This is an important item.  Basically, when this is
  161.             selected, the program will make sure no other tasks 
  162.             are given CPU time while one of the tests is running.
  163.             In this way, you are assured that the test results will
  164.             reflect true CPU performance, and not lag due to other
  165.             tasks taking up some of the CPU's time.  All of the 
  166.             comparison figures for the other machines were obtained
  167.             with this option ON (A check will be placed by the
  168.             option when it is active), SO IF YOU WISH TO COMPARE
  169.             TO THE OTHER MACHINES IN THE PROGRAM MOST ACCURATELY,
  170.             HAVE 'Be Selfish' SELECTED!!!  <whew>. Read on...When 'Be
  171.             Selfish' is active, the system will not respond to you
  172.             while a test is running.  Meaning, you will not be able
  173.             to move your mouse pointer, and that most enjoyable 
  174.             floppy drive 'clicking' will even stop.  THIS IS NORMAL!
  175.             You will regain control when the test completes...the
  176.             system did not hang.  Some tests do take a little time,
  177.             so hang in there.  The only time you will really not
  178.             want to have 'Be Selfish' active is if you wish to 
  179.             test the performance drain on your system from having
  180.             multiple tasks running. (or just to see what the normal
  181.             load of tasks does to your CPU performance). Now...you must
  182.             know something about this option.  What I do when this option
  183.             is enabled is invoke a Disable() call a bit befpre each test, 
  184.             and then an Enable() afterwards.  Disable() effectively STOPs
  185.             all interrupts within the system.  Since multitasking is
  186.             interrupt-driven, this is also stopped, and my task becomes
  187.             the only one doing anything (there are exceptions...that is
  188.             explained later).  ALL this aside, I MUST give you a warning.
  189.             I designed this program to test CPU performance, and as such it 
  190.             is a good idea to have as little running in the background as 
  191.             possible...aside from performance issues though, there are
  192.             some programs/operations which are very timing sensitive.  If
  193.             you are running one of these in the background, then DO NOT
  194.             use 'Be Selfish'...I suggest just waiting until you are done
  195.             with that operation before using this program.  This is 
  196.             especially true of Disk-based operations...it is possible that
  197.             if you are doing a large r/w operation on your Hard Drive, or
  198.             floppy, and run this program with 'Be Selfish' enabled, you 
  199.             could run into problems.  To be safe, just consider such things
  200.             a no-no.  NOTE: AIBB's own file saving is done in a safe way,
  201.             and CAN be used with 'Be Selfish', as the program only accesses
  202.             the disk when not performing a test. 
  203.             Anyway, since you want to use this program to test CPU 
  204.             performance, it is best to run it basically alone. The program
  205.             defaults to NOT using Be Selfish so that the quick-to-jump-in
  206.             person will not feel my program has locked-up the system when
  207.             they go to do a test.  The first time you select 'Be Selfish'
  208.             from the menu, a requester will pop up reminding you of what
  209.             I just said here.  Once the requester has appeared the
  210.             first time, it will not appear again during the course of the
  211.             program's execution, regardless of how you set the Be Selfish
  212.             menu option (otherwise it could become quite annoying :-) )
  213.             Now, with 'Be Selfish' NOT enabled, there are no restrictions 
  214.             to this program's use, but again you will show a marked 
  215.             performance drop.
  216.  
  217.    Comp. Machine Type:
  218.             This menu item allows you to change the type of machines
  219.             you will be comparing yours to.  When selected, a
  220.             submenu will appear next to it with the items MC68030 and
  221.             OTHERS within it.  Simply, selecting MC68030 sets the
  222.             program for comparing 68030 based machines and the 
  223.             OTHERS item sets the program for comparing a few other selected
  224.             machines, the A2500/20 equipped with a 14.28MHz 68020, and a 
  225.             68010 equipped A2000 running at the normal 7.14MHz clock. The 
  226.             default selection is for 68030 machines.  Note that no matter 
  227.             which machine type is selected, the one constant here is the 
  228.             standard A2000.  The A2000 will always be one of the comparison 
  229.             machines regardless of the type selected. Do read the section 
  230.             below labeled 'Alt A2000 base' however.
  231.  
  232.             The current comparison machines for
  233.             each type are: (and the setting used to get the internal 
  234.             figures)
  235.  
  236.                  68030:  A2500/30--or equivalently an A2000 fitted with 
  237.                          an A2630 accelerator. This machine uses a 25MHz
  238.                          processor. The internal comparison figures for 
  239.                          this machine were obtained for the following
  240.                          setups: 4 megs of 100ns 32-bit RAM were used, 
  241.                          and the ROM image was mapped into the 32-bit RAM
  242.                          area using Dave Haynie's SetCPU v1.6 program.  
  243.                          The exact SetCPU setting was:
  244.                          SETCPU: 68030 FASTROM (INST: CACHE BURST)
  245.                                                (DATA: CACHE BURST).
  246.                          Although on a 2500/30 the BURST setting has no
  247.                          effect on the current setup. 
  248.                          (Can't hurt to leave it set though :-) ).
  249.                          In addition, each test WAS performed with a 
  250.                          minimal of background tasks running...regardless
  251.                          of the 'Be Selfish' option, which was used at
  252.                          all times.
  253.                          ---------------------------------------------- 
  254.                          A3000/25--An Amiga 3000 using a 25MHz 68030 was
  255.                          used for the comparison machine in this program.
  256.                          The A3000s used for the comparisons were NOT
  257.                          equipped with Static-Column type FAST RAM, but
  258.                          rather with standard DRAMs.  I did make an analysis
  259.                          of SCRAM over DRAM speed, and while there is a 
  260.                          difference, I felt it best to include a more or
  261.                          less 'stock' type of A3000 here.
  262.                          Since the ROMs are already on a 32-bit bus for
  263.                          this machine, no action was (or needed to be)
  264.                          taken in respect to that.  For cache settings,
  265.                          both the instruction and data caches were ON.
  266.                          BURST mode again was not in effect due to the
  267.                          system configuration.
  268.                            
  269.                  OTHERS: 68010 Amiga:  This is basically just a standard
  270.                          Amiga 2000 fitted with a 68010 processor in place
  271.                          of the 68000.  As with the 68000 Amiga 2000, all
  272.                          tests were conducted in a FAST RAM environment.
  273.  
  274.                          A2500/20: This is the original version of the
  275.                          2500...an Amiga fitted with a 14.28MHz 68020,
  276.                          and 2 megabytes of 100ns 32-bit RAM.  Again,
  277.                          SetCPU 1.6 was used to move the system ROM image
  278.                          into the 32-bit environment.
  279.  
  280.  
  281.  
  282.             None of the comparison machines was running any special
  283.             performance enhancing program, such as MoveSSP or VBR, 
  284.             which improve performance by moving certain data from CHIP
  285.             to FAST RAM to avoid the bus contention in CHIP RAM.
  286.             Note that these programs are irrelevant for the machines using
  287.             SetCPU v1.6 to move the ROM image into 32-bit RAM.  SetCPU v1.6
  288.             will perform these functions itself, and thus this does play
  289.             a factor for those machines.  They were not used for the A2000
  290.             and 68010 based A2000.  If you use any of these programs, on an
  291.             A2000, you may notice a slight increase in performance over the 
  292.             similar machine in the comparison lineup.  This increase may be 
  293.             small enough, however that it will not show up definitively on 
  294.             the graph or percentages, as account of the error margin.
  295.  
  296.             I must make mention of the fact that for all machines used
  297.             for the internal comparisons, v1.3 of AmigaOS was used.
  298.             This INCLUDES the A3000 measurements.  The reason I did
  299.             not use 2.0 is that there IS a difference in machine performance
  300.             when using v2.0 of AmigaOS.  When 2.0 becomes widely available,
  301.             I intend to update the program to handle measurements for that
  302.             version of the OS.  If you are using 2.0, this program will
  303.             work fine, but you cannot use the comparisons to any real 
  304.             accuracy, because as of this writing, 2.0 was not burned into
  305.             ROM, and the version being used was of a RAM-based KickStart
  306.             variety.  This has the effect of giving either falsly high, or
  307.             occasionally low, readings for time results and thus affects
  308.             the comparisons.  [An actual ROM image will vary from a RAM
  309.             based image, due to the differences in the medium].  AIBB
  310.             will be updated, of course, and if 2.0 does come into ROM soon,
  311.             you could use this version to test the new OS's speed for 
  312.             some of the comparisons which are dependent on OS functions
  313.             against 1.3 figures.  Also bear in mind that the A3000 is a
  314.             very new machine, and has in fact had several components updated
  315.             over it's life so far... (including the 'Buster' RAM controller).
  316.             In fact, you should consider the A3000 results contained in
  317.             this program to be 'preliminary'...if I find that something has
  318.             changed the performance of future A3000s, I shall update AIBB
  319.             accordingly..[Also, some earlier A3000s may show slight variations
  320.             due to the above reasons].
  321.                  
  322.             NOTE: All machines used internally are NTSC-based machines.
  323.                   PAL machines may show false performance readings for
  324.                   the comparisons. In addition, overscanned displays
  325.                   *MAY* have an effect on test results if they are active
  326.                   at the same time the program is running.  Also, the A3000
  327.                   productivity mode is notorious for sucking up the system
  328.                   bandwidth, so keep this in mind.      
  329.  
  330.    Change Base:
  331.               This menu item allows the selection of the machine to be
  332.               used as the base in the percentage comparisons.  The 
  333.               submenu which appears next to it allows you to choose
  334.               which machine you wish to use as the base machine...the
  335.               default being the A2000.  With any base, the
  336.               percentages, and the graph show the performance of both
  337.               your machine, and the other machines as compared to the
  338.               base.  The base machine will always show itself to have
  339.               a relative performance of 100% (naturally, as it's 
  340.               evaluating itself against itself).  The other machines
  341.               will show percentages relative to the base machine's 
  342.               performance.
  343.  
  344.    Large Graph Scale:
  345.               This is an option I added when it became apparent that
  346.               some of new 68040 boards to be (or have been..depending
  347.               on when you read this) released were just to fast to 
  348.               fit on the normal graph scale for any test.  When this
  349.               item has been selected (checked), the graph scale will
  350.               double in size...this will be apparent on the screen, as
  351.               the scale will no longer go from 0 to 14 (0-1400%), but
  352.               rather from 0 to 28 (0-2800%).  Probably the only time
  353.               you would wish to do this is if your machine goes off 
  354.               the scale during any test while using the standard scale.
  355.  
  356.    Alt. A2000 Base: 
  357.               This menu function serves a purpose which will only be 
  358.               necessary for certain individuals.  When evaluating the 
  359.               performance of the A2000, I came across some interesting 
  360.               results...Some machines ran the test SLOWER than others.
  361.               Generally, the same machines showed the slower results 
  362.               on a consistant basis...so this menu function.  When you
  363.               select this menu function, AIBB will use a different set of
  364.               internal comparisons for the A2000...these will reflect the
  365.               slower performance of these certain machines.  If you are 
  366.               running an A2000, and are within all the other parameters 
  367.               used for the tests, and results are still coming up slow, 
  368.               select this menu function.  Now, if you are using an 
  369.               accelerator, and are comparing to other machines, this setting
  370.               makes NO difference.  The slower figures turn out to be a
  371.               certain factor slower than the 'normal' figures, so the net
  372.               result will be that selecting either of these will simply 
  373.               end up in a 'shifting' of the other results...including your
  374.               own by the same amount.  Hence, comparisons between the other
  375.               machines are not affected...it is probably a good idea to 
  376.               stick with the default 'faster' results though, in order to
  377.               get an idea of how your system marks against an A2000 running
  378.               at this speed, percentage wise...and most A2000s run at this.
  379.               I've found a few that do not, and I have some ideas related to
  380.               the memory they are using, and possible the Gary chip version,
  381.               but the results for those specific machines were always slower,
  382.               wheras 'faster' machines ALWAYS showed faster, thus I have
  383.               eliminated coding errors from this phenomena.
  384.  
  385.    Stack Variables:
  386.               This menu item is somewhat mislabled, but that's ok.  What
  387.               this does is such:  When the item is selected, (checked),
  388.               The program will use Stack-allocated variables for the Sieve
  389.               and Matrix tests.  Since these tests use rather large variable
  390.               arrays, this is the reason I mentioned you must have a stack
  391.               setting of 12000 or greater in order to use this function.
  392.               The reason I included this item is that the systems do run
  393.               faster with these tests when the variables used in this way.
  394.               When the program is first started, it will look at what your
  395.               current stack setting for it is...if it is 12000 or greater,
  396.               it will invoke this menu item automatically as the default.
  397.               If you use a stack setting lower, it will use the alternate 
  398.               method of test variable allocation, and ghost this menu
  399.               selection.  The alternate way of variable allocation uses
  400.               memory allocation calls to reserve an area of memory for my
  401.               test variables.  Because of this, it is an interesting way
  402.               to test the differences between memory speeds for different
  403.               machines (or even your own, with a few tricks :-) ).  Note
  404.               that this menu item only affects the Sieve and Matrix tests.
  405.               The program will adjust its comparison figures to
  406.               the setup you have selected. NOTE: This is in no way connected
  407.               with the System Stack mentioned earlier in the System Status
  408.               menu section.  The Stack being referred to here is the program
  409.               stack, which is completely seperate and is allocated when
  410.               the program's task is created upon startup.  The speed 
  411.               difference you will see between the two is base upon the fact
  412.               that for the external memory-allocated variables, the program
  413.               must make full address memory accesses to reference the 
  414.               variables, whereas in the stack method, they are pulled off
  415.               the program stack.  The difference is not great, but it is
  416.               interesting to note. 
  417.  
  418.  
  419. Depending on the processor your machine has, you may find another menu, 
  420. 'Processor'.  This field only appears if you are running a 68020 or above 
  421. and allows you to switch the caches of your processor on/off, to see the
  422. effects doing this has on test results.  The menu configures itself to
  423. your processor type, so if you are running a 68020, the only item that will
  424. appear under this menu is 'Switch I-Cache'.  For higher processors, items
  425. to manipulate the Data and Instruction cache, and the BURST modes will
  426. also appear.  When a cache is changed this way, the new cache status will
  427. appear in the CPU status indication area explained below.  If you do
  428. choose to manipulate the caches during the tests, and get lazy and don't
  429. set them back the way they were, the program will automatically set the
  430. caches to the state they were in upon startup when you quit the program.
  431. NOTE: As I indicated, if you are running a 68000 or 68010, this menu will
  432. not be present, as it is of no use to those processors. (Besides, if you try
  433. to set a Cache Control Register (CACR) value on a 68000 or 68010, neither
  434. of which have a CACR...you get a nice, and pleasant light/sound effects
  435. show... and associated strange happenings. :-) ) Also, although the choice
  436. for switching BURST mode on may appear for your machine's processor, it
  437. may have no effect.  This is because your processor must be capable of
  438. using this mode, and some are not.  If you switch it on and your machine
  439. isn't able to use it, no harm will come of it.  In fact, the program will
  440. still set the BURST enable bit(s) in the Cache Control Register, but the
  441. processor will simply ignore them.  [It'll look at what I did and say
  442. 'huh?' ;^) ].
  443.  
  444.  
  445. The Screen:
  446.      The screen is divided into two areas.  On the left side, you will find
  447. the performance graph, and CPU status indications.  The performance graph is
  448. basically just a graphical display of the percentage performance of the 
  449. various machines, including your own.  The scale, numbered from 0 to 14, 
  450. represents percentages in hundreds, i.e. a factor of 6 would be 600%, etc...
  451. If for some reason your machine measures off the scale (LUCKY YOU!!!) then
  452. the graph will not be displayed above 14 (1400%), but will stop there and
  453. show a plus (+) sign above the graph bar.  The CPU status area is directly
  454. below the graph, and shows the CPU type in your system, and the status of
  455. the various caches, if applicable, as well as if burst mode on the caches
  456. has been enabled.  If your CPU does not have a particular cache feature, the
  457. display will show 'NONE'. 
  458.      The right side of the display contains the numerical analysis display
  459. boxes and the test selection gadgets.  From top to bottom, the features are:
  460.      
  461.      Benchmark Result:  This box shows the running time in seconds for the
  462.                         benchmark performed.  It is not a comparison, but
  463.                         simply a display of the time used in performing the
  464.                         benchmark.
  465.  
  466.      Base Machine = :   This area will show what machine is currently being
  467.                         used as the base machine for percentage calculations.
  468.  
  469.      The next 4 boxes in decending order are the numerical representations of
  470.      the percentage performance of each machine for a particular benchmark.
  471.      Note that even if your machine happens to go off the graph scale, the
  472.      numerical percentage will still be shown here, so you will still get a
  473.      performance evaluation.  Remember that all percentage calculations are
  474.      percentages of the base machine, where the base machine will always show
  475.      100% performance (naturally, as it is relative to itself).
  476.  
  477. The bottom portion of the right side display area contains the test selection
  478. gadgets.  A description of the test each performs is outlined below:
  479.  
  480.      WritePixel:  This is a derivation of the original SetAPen/WritePixel
  481.                   first introduced by Computer Systems Associates (CSA).
  482.                   It draws a box on the screen one pixel at a time using
  483.                   the OS function call Writepixel(), then erases the box
  484.                   in the same manner.  The test is useful mainly for 
  485.                   testing the speed increase of systems which have their
  486.                   KickStart images mapped into a 32-bit RAM environment.
  487.      
  488.      Sieve:       The Sieve test used here is the basic Sieve of
  489.                   Erathosthenes test for prime numbers.  It searches a
  490.                   set of 8191 numbers for primes in a loop 100 iterations
  491.                   in length.
  492.  
  493.      Sort:        The Sort test I use here is a simple shell-sort
  494.                   algorithm for sorting integers.  I do not use a random
  495.                   list of numbers to sort, as that would result in different
  496.                   benchmark times depending on the way the list turned out,
  497.                   but rather I use my own 'mixing' method for scrambling
  498.                   the numbers so they are mixed in the same way every time.
  499.                   The test measures the time it takes to order the resultant
  500.                   mess (12000 numbers).
  501.  
  502.      Savage:      This test is just a loop test of performing a series of
  503.                   nested floating point operations on a number.  This test
  504.                   requires the use of the Amiga's MathTrans.library, which
  505.                   should be in your libs: directory.  NOTE:  The performance
  506.                   figures for the other machines were obtained using the 
  507.                   mathtrans.library which comes with the WorkBench on the
  508.                   Amiga.  There are versions of this library around which 
  509.                   map those functions and such to a math coprocessor.  If 
  510.                   you wish to compare your machine on par with the machines
  511.                   represented internally, you should NOT be using one of
  512.                   these other libraries.  (It would be quite an unfair 
  513.                   advantage :-) ).  If the program cannot find the 
  514.                   mathtrans.library in your libs: directory, it will inform
  515.                   you of the problem and disable the Savage test gadget.
  516.  
  517.      Dhrystone:   This one should be fairly familiar to most people.  It is
  518.                   a standard port of the ever-popular Dhrystone benchmark
  519.                   used on so many systems.  It is a close port of the original
  520.                   version written in ADA by Reinhold P. Weicker, and the
  521.                   Modula-2 port by Joergen Thomsen.
  522.  
  523.      Matrix:      A simple matrix addition/multiplication benchmark on
  524.                   three 40x40 integer matrices. With a loop increment
  525.                   added to smooth out fluxuations.  The time in the loop
  526.                   is factored out of the returned time and percentage
  527.                   calculations.
  528.  
  529. Now, none of these tests has been 'optimized' in any way.  Thus, you may 
  530. notice that, for instance, you get a lower dhrystone/second rating on 
  531. your machine than other programs show.  This is not a problem.  Since the
  532. comparisons are done from figures recieved from this program, running this
  533. code, the percentage differences between machines are valid, in that sense.
  534. (A different machine will just run the code the same percentage slower, or
  535. faster, and get a results proportional to the others).  Why did I use these
  536. 'slow' unoptimized tests?  Simple...if I wanted to compare compiler 
  537. efficiency, then I would want to optimize the code (for instance, the dhrystone
  538. test will run faster using 32-bit long addressing, rather than 16-bit base
  539. A4 register offset addressing, and using register variables could speed things
  540. up a great deal).  However, I am NOT comparing compiler/language speeds here.
  541. The goal is to find the speed of the system relative to others.  Optimizing
  542. the code negates this goal...an optimizing compiler run can play all sorts
  543. of neat tricks on the benchmark...entire loops can be removed if the compiler
  544. senses they serve no purpose, etc...  Doing said things is not a good way to
  545. test system performance, so I chose to leave the tests completely unoptimized.
  546.  
  547. General Notes:
  548.  
  549.      The tests performance figures here are meant to give you a general
  550. idea of the performance of your machine.  As is always with benchmarks,
  551. there is a margin of error, and certain circumstances can increase that
  552. margin.  To get the minimum error from these tests, I recommend the
  553. following: (Of course any of these can be disregarded if you are trying
  554. to see the performance of your system in different environments...this is
  555. only a general guideline to duplicate the test conditions for the machines
  556. being compared against)
  557.  
  558.        1.) Make SURE you are running in FAST RAM only.  Due to bus contention,
  559.            running in CHIP or SLOW-FAST RAM (address $C00000) can cause a
  560.            reduction in performance.  If the program detects it has been
  561.            loaded into CHIP or SLOW-FAST RAM, it will pop a requester up
  562.            informing you of this, but this does not tell you everything.
  563.            This requester will only appear if the MAIN program ends up
  564.            using these memory mediums.  The tests themselves allocate some
  565.            memory when performed, and if you happen to get AIBB squeezed 
  566.            into the last dregs of your FAST RAM, the tests themselves may
  567.            be force to use CHIP or SLOW-FAST RAM, thus degrading performance.
  568.            In general, try to be sure you have at least 50K of FAST RAM
  569.            sitting free after AIBB itself loads up.  And of course, if you
  570.            are using an accelerator with 32-bit RAM, FAST RAM to you should
  571.            mean the 32-bit variety.  Also a warning for 16-bit RAM: You may
  572.            have plenty of FAST RAM on your system, but there is a caveat.
  573.            You must be sure that the true FAST RAM you have is highest on
  574.            the system memory priority.  Simply put, if you do not have the
  575.            1-megabyte Fat Agnus chip, that SLOW-FAST memory at location 
  576.            $C00000 will end up at the same priority as your true FAST RAM,
  577.            UNLESS you have the program FastMemFirst called from your 
  578.            startup-sequence.  Alternatively, you can set the priority 
  579.            manually with a program called MemPri.  Just be sure your true
  580.            FAST RAM has priority over all other memory.  This precaution
  581.            is mainly for people not running accelerators, as the memory on
  582.            accelerators is usually set up as highest priority to begin with
  583.            (and you WILL notice if it is not...)
  584.        
  585.        2.) Although while using the 'Be Selfish' option all other tasks will
  586.            not be allocated CPU time, a good general rule is to try to have
  587.            as few large tasks running in the background as possible.  The 
  588.            reason for this is that as mentioned above the tests do allocate 
  589.            memory for themselves when invoked, and if another task suddenly 
  590.            eats a large portion of memory, the test may be forced to use 
  591.            memory which turns out slower (CHIP, SLOW-FAST, or on 32-bit 
  592.            machines 16-bit memory may end up being used).  Also, if you are
  593.            doing some graphics/blitter work in the background, and run the
  594.            tests, Be Selfish may be overridden.  Some graphics functions, and
  595.            most notably the blitter, can break any hold on task switching,
  596.            including a Disable() or Forbid().  In particular, if a function
  597.            makes a Wait() call, this can temporarily undo a Disable(), thus
  598.            negating a section of the benchmark run.  Moreover, the data and
  599.            instruction caches on so-equipped machines are also dealing
  600.            with the code and data being used by other tasks when they are
  601.            running, so I have found the most consistant and accurate tests
  602.            come out when having as few other tasks running as possible. 
  603.            Usually the internal caches don't play TOO much of a part in this,
  604.            but still for the best results possible running alone is the
  605.            best way to use this program for accuracy.
  606.            However, you CAN still get a general idea otherwise.
  607.  
  608.        3.) To get the best figures, run a test more than once.  The figures
  609.            will stabilize after the first test or so (as the caches on such
  610.            equipped machines end up with more of the test code than before).
  611.            This is especially true of the WritePixel and Dhrystone tests.
  612.            The Dhrystone test may continue to fluxuate slightly even after
  613.            a few tests.  This is mainly due to which parts of it end up
  614.            being cached, and cannot be eliminated.  The caches on 030 and
  615.            020 processors are marvelous speed enhancers, but they also make
  616.            accurate benchmarks a nightmare.  The dhrystone test particularly
  617.            is a pain to get real stable figures from.  It has a tendency
  618.            to have different parts of it cached during different runs, making
  619.            for slightly different results over time. Now, the fluxuation is 
  620.            not tremendously great, and you will still be able to get a fairly 
  621.            good CPU performance evaluation.  Note however that this is one of
  622.            the reasons that you cannot take the internal evaluations here
  623.            to be 'the final word'. Also, there are some caveats
  624.            pertaining to the WritePixel test.  Certain accelerators access
  625.            the Amiga's bus in different ways, and thus may show slower
  626.            (or possible faster) than another while being the opposite for
  627.            other tests.  This does not necessarily mean that boards with
  628.            equivalent functions are 'defective', just that the bus access
  629.            is different, (in some cases for compatibility reasons...and 
  630.            some of this is with good cause), and may show up as an APPARENT
  631.            speed difference in the WritePixel test.  
  632.            In effect the WritePixel in all cases can be viewed as a speed of
  633.            ROM routine AND bus access, and not the actual speed of the ROM 
  634.            image itself, as the WritePixel accesses the system bus in order
  635.            to manipulate graphics memory.  This is just a fact to keep in 
  636.            mind, and shows that, at least for the WritePixel test, what 
  637.            shows up may not be the full story.
  638.  
  639.        4.) If you are using a 68020 or 68030 equipped accelerator, you 
  640.            probably know by now that in all cases you should have at least 
  641.            your instruction cache turned ON.  This is especially true in a 
  642.            16-bit RAM environment.  In a 16-bit environment, with the 
  643.            instruction cache turned OFF, your system will take a SEVERE 
  644.            performance hit. The reason for this is such:  The 68020 and 68030 
  645.            instruction unit pre-fetches are 32-bit longwords.  In a 16-bit 
  646.            memory situation, this is a 2 bus cycle process.  In many cases, 
  647.            the second 16-bit word of the pre-fetch is thrown out.  In a 
  648.            32-bit environment, this is not a problem...but in a 16-bit 
  649.            environment, the result is fetching and then throwing out what is 
  650.            then fetched again, from the 16-bit RAM environment, thus adding
  651.            another 2-bus cycle performance penalty.  The 68000 does 16-bit 
  652.            pre-fetches, so it does not have a problem with this.  The 
  653.            instruction cache on the 020 and 030 serves to 'buffer' this 
  654.            pre-fetch loss in the 16-bit environment. (I explained this poorly,
  655.            but basically the idea is unless you are testing the performance 
  656.            degradation of such an operation...leave the Instruction cache ON
  657.            unless you are in the 32-bit environment, and even then there
  658.            isn't any real reason to turn it off, since the Instruction cache
  659.            is read-only and does not suffer from the problems with DMA that
  660.            the 030 data cache can have  (Oh...the 040 and it's full bus 
  661.            snooping logic ought to fun, though...). One further thing 
  662.            pertaining to 030 caches...I do know of one board (there may be
  663.            others) which does NOT use the Instruction cache while in
  664.            ANY 16-bit environment...as per the reasons above it could show
  665.            up as a major performance hit.  Thus, it is best to know the
  666.            accelerator being evaluated, and exactly what it and it's caches
  667.            are doing (or capable of doing) in a given environment.
  668.  
  669.        5.) The Dhrystone figures should be considered the most touchy.  You
  670.            can surely get a good representation on a medium-grade scale, but
  671.            do not fine-judge anything with just one reading from this test
  672.            (or any for that matter, but this one especially).  The dhrystone
  673.            test is particularly apt to give fluxuations due to cache 
  674.            inconsistancies on 020 and 030 machines. (or any cache-utilizing
  675.            machine).  The fluxuations are not astoundingly large, and 
  676.            because of that I was able to take a weighted average and use
  677.            it for the internal comparisons between machines. (a weighted 
  678.            average was taken for all internal comparison machines.).
  679.  
  680.     The above tips of course (as said before) are only meant to help duplicate
  681. the conditions used for the figures obtained for the internal comparison 
  682. machines.   Now, even if you have the same type of machine as one of the
  683. comparison machines, you still may end up with slightly different figures.
  684. One of the major differences you may notice is an A2500/30 (or A2630) 
  685. coming up a bit slower than the internal figures for an A2500/30, 
  686. even with all the cache settings the same, is the use of faster RAM chips
  687. (the A2500/30 or A2630 accelerator is equipped with 100ns chips running with
  688. the processor at 3 wait states.)  Now, you must remember, it will be almost 
  689. IMPOSSIBLE for you to duplicate the EXACT figures for the internal machines,
  690. but given the exact same machine type, and settings/configuration you should
  691. come to within a reasonable range of the comparison figures.  (The reason
  692. you cannot EXACTLY duplicate them most of the time is that no two machines
  693. are ever exactly alike).
  694. What you will get is basically an average mean value.  This program is
  695. mainly useful for seeing if large differences are apparent between other
  696. types of accelerators.
  697.  
  698. This program was basically meant to check CPU performance for other
  699. types of machines than the ones kept internally, however, you should feel
  700. free to change your processor settings, memory area/type where the program 
  701. loads in, etc...should you happen to own one of the types of machines kept
  702. internally.  This way you can see what the different settings, and such will
  703. do to your performance level as compared to optimum.  Also, you can see
  704. just how well your machine does against a similar machine that may have more
  705. RAM or such, and CAN use BURST mode, provided your machine cannot, and so
  706. on and so forth.
  707.           
  708. PROGRAMMING NOTES:
  709.  
  710.      I want to make a comment on the use of Disable() within this program.
  711. Disable() is a function designed primarily to allow a task to access data 
  712. structures shared by interrupt code, without worry of having this code 
  713. changed by an interrupt event during the access.  My use of it here was
  714. because it was the only real way to insure that my program would have the
  715. best chance of being given total control of the procesessor.  What I want
  716. to make clear is this:  If you are just starting to program the Amiga,
  717. (or other multitasking systems for that matter), the use of Disable() or
  718. functions like it is to be a last resort, unless you are doing something
  719. very similar to what I have done here.  Disable() is a very cruel thing
  720. to do to a multitasking system, and should be avoided if at all possible.
  721. There are some circumstances where it's use is necessary, to be sure, but
  722. it should be considered that my use of it here is NOT a standard method
  723. of usage for the call.  [In fact, in most circumstances you should not
  724. be Disable()'ed for more than 250ms, as per the RKM recommendations.]
  725. In the context where I have used the call for this program, it won't cause
  726. problems provided the proper (mentioned earlier) environment exists.
  727. But to be sure, indiscriminate calls to Disable() and such are very poor
  728. programming practice.
  729.  
  730. ACKNOWLEDGEMENTS:
  731.  
  732.      I wish to thank all of the folks who helped and supported me in this
  733. project.  These individuals were all a part of the testing of this
  734. program, and influenced it's making a great deal:
  735.  
  736. Bill Seymour: An all-around good-guy, and great help in this program's 
  737.               development.
  738. Michal Todorovic: For pointers on keeping my stack usage to a tolerable
  739.                   level :-).
  740. Michael Walters: Spotted a bug in my code early, and saved me many hours
  741.                  of debugging time...
  742. Dr. Scott Thayer: Sysop of Amiga Friends BBS, and spotter of program 
  743.                   quirks :-)
  744. And of course, the beta testers who put up with my ceaseless requests for
  745. data: Mark Manes, Dan Dwyer, Steve Curry, Bill Hagan, Aryeh Goretsky, 
  746.       Tim Corcoran, Tom Thai, Stuart Logan, and Andrew Hobbs....Thanks!!!
  747.  
  748. MISCELLANEOUS:
  749.          
  750. Questions, comments, and suggestions about this program are quite welcome.
  751. I can be reached the following ways:
  752.  
  753.         Safe Harbor BBS: Amiga Hardware Special Interest Group Operator
  754.                          (SIGOP--SIG Area 7)  (414)548-8140
  755.                          I can always be reached here.
  756.  
  757.         AmiHolics BBS:   (602)843-8486
  758.         Northwest Amiga Group (NAG): (503)656-7393
  759.         Amazing Connection BBS: (602)843-6574
  760.         Amiga Friends BBS: (714)870-4754
  761.         JDR Microsystems BBS: (408)559-0253
  762.         Miller's Amiga System BBS: (612)698-1485
  763.  
  764. I can also be found on Usenet: lkoop@crash!pnet01.cts.com (Internet)
  765. [pick your path :-)]
  766. and have been known to lurk around IntelecNet.
  767. If you wish, you can also contact me via the U.S. Mail service at
  768.  
  769.                               LaMonte Koop
  770.                         565 Park Meadows Dr. #302
  771.                           Waite Park, MN  56387
  772.  
  773. About me...Well, I'm a near-fourth (A what?) year university student 
  774. majoring in Electrical/Computer Engineering, Physics, and Mathematics.
  775. Why all three?  Why not...they're all fairly related, and I find them
  776. hard to choose between. AIBB is the result of my fascination with both
  777. FAST computers, and the hardware that makes them...and everyone needs a
  778. hobby.  I just happened to pick evaluation of accelerators for mine :-).
  779. If you have some interesting ideas for a project, let me know.  I'm always
  780. looking for something to do :-).  If it's not within my current capabilities,
  781. I will probably try to make it so.  (Or yell AAARRRRRRGGGGHHHH really loud
  782. and mutter strange things :-) ).
  783. [Anybody ever thought of using the MMU as a memory defragmenting tool?...
  784. ...mmm, just a thought.]
  785.  
  786.